Coding as a creative craft
Have you heard people saying things like…
- “We need to ship the feature by the end of this sprint.”
- “The client just saw the latest version and they need the copy changed immediately.”
- “We should first focus on the next release, we’ll discuss the DB design in a later stage.”
These are all normal, expected and common phrases. We hear them all the time.
Of course, we understand that our code is built to support a business. That the code is written to deliver a feature that can then be sold to the client. In the end, we want to build a product that the client is happy with.
But one thing often seems to be overlooked, forgotten or ignored.
Coding is a creative craft.
Coding is not a repetitive, mindless activity.
It requires deep focus sessions. It requires thought.
It requires painting ideas on the canvas, looking at the result, and learning from it.
The process of crafting elegant and working code is a personal growth process.
Engineers hone their skills throughout the various projects that they build.
Mozart did not create his masterpiece on the first try.
Indeed, he wrote over 600 musical pieces of music.
He created, he rested, he built, he listened to the result,
he got inspired to do it better next time, he refined, he improved, he grew.
This is the creative process, and coding is a skill just like this.
Of course, this doesn’t mean ignoring deadlines or client requests entirely.
Software development usually happens within the context of a business,
and there will always be a pressure to deliver.
What we need is the right balance for the team to meet business needs and to grow a creative environment for software engineers.
The next time urgent demands and cutting corners are asked, here are some things we can do:
- Reflect on your decision and its impact for the long run. Are we still making sure that we are creating quality, sustainable and elegant software? Communicate and discuss this with your client. Make sure they understand the value for them of building it the right way.
- Think of what’s on the line with the choices you make: Building technical debt vs. making your client happy in the short term? Is the tech debt really going to get addressed next time? How will you do it?
- Decide on a pace that actually works for your team. If it means cutting corners every sprint and skipping time to refactor and clean up a growing code base, it’s not the right pace for your team.
- (Hot take) Move away from sprints and Scrum all together. Why set arbitrary delivery times for features with vastly different sizes and complexities? Sprints can force us to cut corners and focus on the next sprint goal, often skipping the crucial time needed to experiment and think about good design. Explore releasing all the time, rather than on arbitrary calendar-based schedules.
Coding is a creative craft.
It means taking time to let things rest and reminisce. To let ideas flourish in our subconscious.
It means taking time to discuss ideas and explore unexplored territories.
To explore alternative ways of reaching our goal.
Because for creative work, there is no set path.
There is no single process that can work every time.
We need to build. Reflect. Grow.
That is the art of creative work.
That is the art of coding.
By embracing reflection, experimentation and working at a sustainable pace, we can build better software, foster developer growth, and deliver greater value to our clients.
Are my takes too hot? I’m not sure. These are my thoughts after working professionally for 7 years in various companies and teams.
If these problems sound familiar and you feel the pressure of arbitrary deadlines and cutting corners, I offer 1-on-1 coaching for junior & mid-level software engineers.
I’m always curious about people – do drop me a message with your story!